/*
1.如何创建node服务器
2.如何接受客户端请求post and get  form请求
3.如何响应客户端请求
4.如何读取文件
*/
var fs = require('fs')//读写文件模块
var http = require('http')//http 模块主要用于搭建 HTTP 服务端和客户端，使用 HTTP 服务器或客户端功能必须调用 http 模块
var url  = require('url');//对请求路径的处理模块
var util = require('util');//工具类模块
var path = require('path');
var querystring = require('querystring');

var temp = {a:'1234',b:'23232',c:function(){}}
http.createServer(function(req,res){
  //请求类型
  var method = req.method
  var _path = url.parse(req.url, true)

  if(_path.pathname=='/'){
     // 异步读取
    fs.readFile('index.html', function (err, data) {
       if (err) {
           return console.error(err);
       }
       res.end(data.toString())
    });
   }else if(_path.pathname=='/upload'){

   }else{
      switch(method){
        case 'POST' :
          post(req,res);
          break;
        default :
          get(req,res);
      }
   }
  //发送http 头部
  //http 状态只：200
  //内容类型
  // res.writeHead(200,{'Content-Type':'text/plain'})
  // res.end(util.inspect(url.parse(req.url, true)));
  // res.end(util.inspect(req))
}).listen(8089);
console.log('Server running at http://127.0.0.1:8089/');

function get(req,res){
  var query = url.parse(req.url).query
  var pathname = url.parse(req.url).pathname
  res.writeHead(200,{'Content-Type':'text/plain ; charset=UTF-8'}) //需要设置charset=UTF-8 否则响应的中文乱码
  res.end('您的get请求参数为'+ util.inspect(query) +'\n' + '您的请求路径'+ pathname )
}

/*处理post请求*/
function post(req,res){
  var _path = url.parse(req.url, true)
  var pathname = url.parse(req.url).pathname
  var body ='';
  /*
  解析请求体数据
  POST 请求的内容全部的都在请求体中，http.ServerRequest 并没有一个属性内容为请求体，原因是等待请求体传输可能是一件耗时的工作。
  比如上传文件，而很多时候我们可能并不需要理会请求体的内容，恶意的POST请求会大大消耗服务器的资源，
  所以 node.js 默认是不会解析请求体的，当你需要的时候，需要手动来做。
  */
  req.on('data',function(chunk ){
    body +=chunk // key=xxx
  })
  req.on('end',function(){
    body = querystring.parse(body) //key=xxx ===>{key:xxx}
    //First argument must be a string or Buffer
    res.end('您的post请求参数为' +  util.inspect(body) +  '您的请求路径'+ pathname )
  })

}

function form(req,res){}
